package cn.itcast.web.controller.cargo;

import cn.itcast.domain.cargo.Contract;
import cn.itcast.domain.cargo.ContractExample;
import cn.itcast.domain.system.User;
import cn.itcast.service.cargo.ContractService;
import cn.itcast.web.controller.system.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.util.StringUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/cargo/contract")
public class ContractController extends BaseController {
  @Reference
  private ContractService contractService;


  /*
     作用： 展示购销合同的列表
     url: http://locallhost:8080/cargo/contract/list.do
     返回页面： 购销合同的列表页面
  */
  @RequestMapping("/list.do")
  public String list(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "5") int pageSize) {
    ContractExample contractExample = new ContractExample();
    //在逆向工程中如果需要根据时间排序 ， 不是条件所以不需要创建Criteria对象
    contractExample.setOrderByClause("create_time desc");
    ContractExample.Criteria criteria = contractExample.createCriteria();

    //添加展示购销合同的条件
    //获取当前登陆者的用户等级
    User loginUser = getLoginUser();
    Integer degree = loginUser.getDegree();
    switch (degree) {
      case 4:
        //普通员工
        criteria.andCreateByEqualTo(loginUser.getId());
        break;
      case 3:
        //部门经理
        criteria.andCreateDeptEqualTo(loginUser.getDeptId());
        break;
      case 2:
        //大区经理
        PageInfo<Contract> pageInfo = contractService.findPageByDeptId(loginUser.getDeptId(), pageNum, pageSize);
        //存储到域中
        request.setAttribute("pageInfo", pageInfo);
        //返回展示页面列表的页面   前缀： /WEB-INF/pages/  后缀名： .jsp
        return "cargo/contract/contract-list";
      case 1:
        //系统管理员
        criteria.andCompanyIdEqualTo(loginUser.getCompanyId());
        break;
    }
    PageInfo<Contract> pageInfo = contractService.findByPage(contractExample, pageNum, pageSize);
    //存储到域中
    request.setAttribute("pageInfo", pageInfo);
    //返回展示页面列表的页面   前缀： /WEB-INF/pages/  后缀名： .jsp
    return "cargo/contract/contract-list";
  }

  /*
   url:cargo/contract/contract-add
   作用： 进入添加页面
   参数： 无
  */
  @RequestMapping("/toAdd")
  public String toAdd() {
    return "cargo/contract/contract-add";
  }

  /*
     url: cargo/contract/edit.do
     作用： 新增购销合同||更新购销合同
     参数： 购销合同
     返回值：购销合同列表页面
    */
  @RequestMapping("/edit")
  public String edit(Contract contract) {
    //补全购销合同信息
    String companyId = getLoginCompanyId();
    String companyName = getLoginCompanyName();
    contract.setCompanyId(companyId);
    contract.setCompanyName(companyName);
    //补全购销创建人与创建人所属的购销合同
    contract.setCreateBy(getLoginUser().getId()); //登陆者的id
    contract.setCreateDept(getLoginUser().getDeptId()); //登陆者所属的购销合同
    if (StringUtil.isEmpty(contract.getId())) {
      contractService.save(contract);
    } else {
      contractService.update(contract);
    }
    return "redirect:/cargo/contract/list.do";//添加redirect开头的返回值则不会经过视图解析器
  }

  /*
   url: /system/Contract/toUpdate.do?id=100
   作用： 进入更新购销合同页面
   参数： 购销合同的id
   返回值：购销合同更新页面
  */
  @RequestMapping("/toUpdate")
  public String toUpdate(String id) {
    //1.根据id查询当前购销合同信息
    Contract contract = contractService.findById(id);
    request.setAttribute("contract", contract);
    return "cargo/contract/contract-update";
  }

  /*
   url: /system/Contract//delete.do?id="+id,
   作用： 删除购销合同
   参数： 购销合同的id
   返回值：购销合同列表页面
  */
  @RequestMapping("/delete")
  public String delete(String id) {
    contractService.delete(id);
    return "redirect:/cargo/contract/list.do";
  }

  /*
     url: /cargo/contract/toView.do?id=4bc7ae89-f02c-4cb0-b74b-ef0e4170adb2
     作用： 查看购销合同
     参数： 购销合同的id
     返回值：购销合同的查看页面
*/
  @RequestMapping("/toView")
  public String toView(String id) {
    Contract contract = contractService.findById(id);
    request.setAttribute("contract", contract);
    return "cargo/contract/contract-view";
  }

  /*
    url: /cargo/contract/submit.do?id=4bc7ae89-f02c-4cb0-b74b-ef0e4170adb2
    作用： 提交购销合同
    参数： 购销合同的id
    返回值：购销合同列表
*/
  @RequestMapping("/submit")
  public String submit(String id) {
    Contract contract = contractService.findById(id);
    contract.setState(1);
    contractService.update(contract);
    return "redirect:/cargo/contract/list.do";
  }

  /*
   url: /cargo/contract/cancel.do?id=4bc7ae89-f02c-4cb0-b74b-ef0e4170adb2
   作用： 取消交购销合同
   参数： 购销合同的id
   返回值：购销合同列表
*/
  @RequestMapping("/cancel")
  public String cancel(String id) {
    Contract contract = contractService.findById(id);
    contract.setState(0);
    contractService.update(contract);
    return "redirect:/cargo/contract/list.do";
  }
}
